logo头像
Snippet 博客主题

HBase学习之路 (四)HBase的API操作

** HBase学习之路 (四)HBase的API操作:** <Excerpt in index | 首页摘要>

​ HBase学习之路 (四)HBase的API操作

<The rest of contents | 余下全文>

Eclipse环境搭建

具体的jar的引入方式可以参考http://www.cnblogs.com/qingyunzong/p/8623309.html

HBase API操作表和数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
  1 import java.io.IOException;
2 import java.util.Date;
3
4 import org.apache.hadoop.conf.Configuration;
5 import org.apache.hadoop.hbase.HBaseConfiguration;
6 import org.apache.hadoop.hbase.HColumnDescriptor;
7 import org.apache.hadoop.hbase.HTableDescriptor;
8 import org.apache.hadoop.hbase.TableName;
9 import org.apache.hadoop.hbase.client.Admin;
10 import org.apache.hadoop.hbase.client.Connection;
11 import org.apache.hadoop.hbase.client.ConnectionFactory;
12 import org.apache.hadoop.hbase.client.Delete;
13 import org.apache.hadoop.hbase.client.Get;
14 import org.apache.hadoop.hbase.client.Put;
15 import org.apache.hadoop.hbase.client.Result;
16 import org.apache.hadoop.hbase.client.ResultScanner;
17 import org.apache.hadoop.hbase.client.Scan;
18 import org.apache.hadoop.hbase.client.Table;
19
20 import com.study.hbase.service.HBaseUtils;
21
22 public class HBaseUtilsImpl implements HBaseUtils {
23
24 private static final String ZK_CONNECT_KEY = "hbase.zookeeper.quorum";
25 private static final String ZK_CONNECT_VALUE = "hadoop1:2181,hadoop2:2181,hadoop3:2181";
26
27 private static Connection conn = null;
28 private static Admin admin = null;
29
30 public static void main(String[] args) throws Exception {
31
32 getConnection();
33 getAdmin();
34
35 HBaseUtilsImpl hbu = new HBaseUtilsImpl();
36
37
38 //hbu.getAllTables();
39
40 //hbu.descTable("people");
41
42 //String[] infos = {"info","family"};
43 //hbu.createTable("people", infos);
44
45 //String[] add = {"cs1","cs2"};
46 //String[] remove = {"cf1","cf2"};
47
48 //HColumnDescriptor hc = new HColumnDescriptor("sixsixsix");
49
50 //hbu.modifyTable("stu",hc);
51 //hbu.getAllTables();
52
53
54 hbu.putData("huoying", "rk001", "cs2", "name", "aobama",new Date().getTime());
55 hbu.getAllTables();
56
57 conn.close();
58 }
59
60 // 获取连接
61 public static Connection getConnection() {
62 // 创建一个可以用来管理hbase配置信息的conf对象
63 Configuration conf = HBaseConfiguration.create();
64 // 设置当前的程序去寻找的hbase在哪里
65 conf.set(ZK_CONNECT_KEY, ZK_CONNECT_VALUE);
66 try {
67 conn = ConnectionFactory.createConnection(conf);
68 } catch (IOException e) {
69 e.printStackTrace();
70 }
71 return conn;
72 }
73
74 // 获取管理员对象
75 public static Admin getAdmin() {
76 try {
77 admin = conn.getAdmin();
78 } catch (IOException e) {
79 e.printStackTrace();
80 }
81 return admin;
82 }
83
84 // 查询所有表
85 @Override
86 public void getAllTables() throws Exception {
87 //获取列簇的描述信息
88 HTableDescriptor[] listTables = admin.listTables();
89 for (HTableDescriptor listTable : listTables) {
90 //转化为表名
91 String tbName = listTable.getNameAsString();
92 //获取列的描述信息
93 HColumnDescriptor[] columnFamilies = listTable.getColumnFamilies();
94 System.out.println("tableName:"+tbName);
95 for(HColumnDescriptor columnFamilie : columnFamilies) {
96 //获取列簇的名字
97 String columnFamilyName = columnFamilie.getNameAsString();
98 System.out.print("\t"+"columnFamilyName:"+columnFamilyName);
99 }
100 System.out.println();
101 }
102
103 }
104
105 // 创建表,传参,表名和列簇的名字
106 @Override
107 public void createTable(String tableName, String[] family) throws Exception {
108
109 TableName name = TableName.valueOf(tableName);
110 //判断表是否存在
111 if(admin.tableExists(name)) {
112 System.out.println("table已经存在!");
113 }else {
114 //表的列簇示例
115 HTableDescriptor htd = new HTableDescriptor(name);
116 //向列簇中添加列的信息
117 for(String str : family) {
118 HColumnDescriptor hcd = new HColumnDescriptor(str);
119 htd.addFamily(hcd);
120 }
121 //创建表
122 admin.createTable(htd);
123 //判断表是否创建成功
124 if(admin.tableExists(name)) {
125 System.out.println("table创建成功");
126 }else {
127 System.out.println("table创建失败");
128 }
129 }
130
131 }
132
133 // 创建表,传参:封装好的多个列簇
134 @Override
135 public void createTable(HTableDescriptor htds) throws Exception {
136 //获得表的名字
137 String tbName = htds.getNameAsString();
138
139 admin.createTable(htds);
140 }
141
142 // 创建表,传参,表名和封装好的多个列簇
143 @Override
144 public void createTable(String tableName, HTableDescriptor htds) throws Exception {
145
146 TableName name = TableName.valueOf(tableName);
147
148 if(admin.tableExists(name)) {
149 System.out.println("table已经存在!");
150 }else {
151 admin.createTable(htds);
152 boolean flag = admin.tableExists(name);
153 System.out.println(flag ? "创建成功" : "创建失败");
154 }
155
156 }
157
158
159 // 查看表的列簇属性
160 @Override
161 public void descTable(String tableName) throws Exception {
162 //转化为表名
163 TableName name = TableName.valueOf(tableName);
164 //判断表是否存在
165 if(admin.tableExists(name)) {
166 //获取表中列簇的描述信息
167 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
168 //获取列簇中列的信息
169 HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
170 for(HColumnDescriptor columnFamily : columnFamilies) {
171 System.out.println(columnFamily);
172 }
173
174 }else {
175 System.out.println("table不存在");
176 }
177
178 }
179
180 // 判断表存在不存在
181 @Override
182 public boolean existTable(String tableName) throws Exception {
183 TableName name = TableName.valueOf(tableName);
184 return admin.tableExists(name);
185 }
186
187 // disable表
188 @Override
189 public void disableTable(String tableName) throws Exception {
190
191 TableName name = TableName.valueOf(tableName);
192
193 if(admin.tableExists(name)) {
194 if(admin.isTableEnabled(name)) {
195 admin.disableTable(name);
196 }else {
197 System.out.println("table不是活动状态");
198 }
199 }else {
200 System.out.println("table不存在");
201 }
202
203 }
204
205 // drop表
206 @Override
207 public void dropTable(String tableName) throws Exception {
208 //转化为表名
209 TableName name = TableName.valueOf(tableName);
210 //判断表是否存在
211 if(admin.tableExists(name)) {
212 //判断表是否处于可用状态
213 boolean tableEnabled = admin.isTableEnabled(name);
214
215 if(tableEnabled) {
216 //使表变成不可用状态
217 admin.disableTable(name);
218 }
219 //删除表
220 admin.deleteTable(name);
221 //判断表是否存在
222 if(admin.tableExists(name)) {
223 System.out.println("删除失败");
224 }else {
225 System.out.println("删除成功");
226 }
227
228 }else {
229 System.out.println("table不存在");
230 }
231
232
233 }
234
235 // 修改表(增加和删除)
236 @Override
237 public void modifyTable(String tableName) throws Exception {
238 //转化为表名
239 TableName name = TableName.valueOf(tableName);
240 //判断表是否存在
241 if(admin.tableExists(name)) {
242 //判断表是否可用状态
243 boolean tableEnabled = admin.isTableEnabled(name);
244
245 if(tableEnabled) {
246 //使表变成不可用
247 admin.disableTable(name);
248 }
249 //根据表名得到表
250 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
251 //创建列簇结构对象
252 HColumnDescriptor columnFamily1 = new HColumnDescriptor("cf1".getBytes());
253 HColumnDescriptor columnFamily2 = new HColumnDescriptor("cf2".getBytes());
254
255 tableDescriptor.addFamily(columnFamily1);
256 tableDescriptor.addFamily(columnFamily2);
257 //替换该表所有的列簇
258 admin.modifyTable(name, tableDescriptor);
259
260 }else {
261 System.out.println("table不存在");
262 }
263 }
264
265 // 修改表(增加和删除)
266 @Override
267 public void modifyTable(String tableName, String[] addColumn, String[] removeColumn) throws Exception {
268 //转化为表名
269 TableName name = TableName.valueOf(tableName);
270 //判断表是否存在
271 if(admin.tableExists(name)) {
272 //判断表是否可用状态
273 boolean tableEnabled = admin.isTableEnabled(name);
274
275 if(tableEnabled) {
276 //使表变成不可用
277 admin.disableTable(name);
278 }
279 //根据表名得到表
280 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
281 //创建列簇结构对象,添加列
282 for(String add : addColumn) {
283 HColumnDescriptor addColumnDescriptor = new HColumnDescriptor(add);
284 tableDescriptor.addFamily(addColumnDescriptor);
285 }
286 //创建列簇结构对象,删除列
287 for(String remove : removeColumn) {
288 HColumnDescriptor removeColumnDescriptor = new HColumnDescriptor(remove);
289 tableDescriptor.removeFamily(removeColumnDescriptor.getName());
290 }
291
292 admin.modifyTable(name, tableDescriptor);
293
294
295 }else {
296 System.out.println("table不存在");
297 }
298
299 }
300
301 @Override
302 public void modifyTable(String tableName, HColumnDescriptor hcds) throws Exception {
303 //转化为表名
304 TableName name = TableName.valueOf(tableName);
305 //根据表名得到表
306 HTableDescriptor tableDescriptor = admin.getTableDescriptor(name);
307 //获取表中所有的列簇信息
308 HColumnDescriptor[] columnFamilies = tableDescriptor.getColumnFamilies();
309
310 boolean flag = false;
311 //判断参数中传入的列簇是否已经在表中存在
312 for(HColumnDescriptor columnFamily : columnFamilies) {
313 if(columnFamily.equals(hcds)) {
314 flag = true;
315 }
316 }
317 //存在提示,不存在直接添加该列簇信息
318 if(flag) {
319 System.out.println("该列簇已经存在");
320 }else {
321 tableDescriptor.addFamily(hcds);
322 admin.modifyTable(name, tableDescriptor);
323 }
324
325 }
326
327
328 /**添加数据
329 *tableName: 表明
330 *rowKey: 行键
331 *familyName:列簇
332 *columnName:列名
333 *value: 值
334 */
335 @Override
336 public void putData(String tableName, String rowKey, String familyName, String columnName, String value)
337 throws Exception {
338 //转化为表名
339 TableName name = TableName.valueOf(tableName);
340 //添加数据之前先判断表是否存在,不存在的话先创建表
341 if(admin.tableExists(name)) {
342
343 }else {
344 //根据表明创建表结构
345 HTableDescriptor tableDescriptor = new HTableDescriptor(name);
346 //定义列簇的名字
347 HColumnDescriptor columnFamilyName = new HColumnDescriptor(familyName);
348 tableDescriptor.addFamily(columnFamilyName);
349 admin.createTable(tableDescriptor);
350
351 }
352
353 Table table = conn.getTable(name);
354 Put put = new Put(rowKey.getBytes());
355
356 put.addColumn(familyName.getBytes(), columnName.getBytes(), value.getBytes());
357 table.put(put);
358
359 }
360
361 @Override
362 public void putData(String tableName, String rowKey, String familyName, String columnName, String value,
363 long timestamp) throws Exception {
364
365 // 转化为表名
366 TableName name = TableName.valueOf(tableName);
367 // 添加数据之前先判断表是否存在,不存在的话先创建表
368 if (admin.tableExists(name)) {
369
370 } else {
371 // 根据表明创建表结构
372 HTableDescriptor tableDescriptor = new HTableDescriptor(name);
373 // 定义列簇的名字
374 HColumnDescriptor columnFamilyName = new HColumnDescriptor(familyName);
375 tableDescriptor.addFamily(columnFamilyName);
376 admin.createTable(tableDescriptor);
377
378 }
379
380 Table table = conn.getTable(name);
381 Put put = new Put(rowKey.getBytes());
382
383 //put.addColumn(familyName.getBytes(), columnName.getBytes(), value.getBytes());
384 put.addImmutable(familyName.getBytes(), columnName.getBytes(), timestamp, value.getBytes());
385 table.put(put);
386
387 }
388
389
390 // 根据rowkey查询数据
391 @Override
392 public Result getResult(String tableName, String rowKey) throws Exception {
393
394 Result result;
395 TableName name = TableName.valueOf(tableName);
396 if(admin.tableExists(name)) {
397 Table table = conn.getTable(name);
398 Get get = new Get(rowKey.getBytes());
399 result = table.get(get);
400
401 }else {
402 result = null;
403 }
404
405 return result;
406 }
407
408 // 根据rowkey查询数据
409 @Override
410 public Result getResult(String tableName, String rowKey, String familyName) throws Exception {
411 Result result;
412 TableName name = TableName.valueOf(tableName);
413 if(admin.tableExists(name)) {
414 Table table = conn.getTable(name);
415 Get get = new Get(rowKey.getBytes());
416 get.addFamily(familyName.getBytes());
417 result = table.get(get);
418
419 }else {
420 result = null;
421 }
422
423 return result;
424 }
425
426 // 根据rowkey查询数据
427 @Override
428 public Result getResult(String tableName, String rowKey, String familyName, String columnName) throws Exception {
429
430 Result result;
431 TableName name = TableName.valueOf(tableName);
432 if(admin.tableExists(name)) {
433 Table table = conn.getTable(name);
434 Get get = new Get(rowKey.getBytes());
435 get.addColumn(familyName.getBytes(), columnName.getBytes());
436 result = table.get(get);
437
438 }else {
439 result = null;
440 }
441
442 return result;
443 }
444
445 // 查询指定version
446 @Override
447 public Result getResultByVersion(String tableName, String rowKey, String familyName, String columnName,
448 int versions) throws Exception {
449
450 Result result;
451 TableName name = TableName.valueOf(tableName);
452 if(admin.tableExists(name)) {
453 Table table = conn.getTable(name);
454 Get get = new Get(rowKey.getBytes());
455 get.addColumn(familyName.getBytes(), columnName.getBytes());
456 get.setMaxVersions(versions);
457 result = table.get(get);
458
459 }else {
460 result = null;
461 }
462
463 return result;
464 }
465
466 // scan全表数据
467 @Override
468 public ResultScanner getResultScann(String tableName) throws Exception {
469
470 ResultScanner result;
471 TableName name = TableName.valueOf(tableName);
472 if(admin.tableExists(name)) {
473 Table table = conn.getTable(name);
474 Scan scan = new Scan();
475 result = table.getScanner(scan);
476
477 }else {
478 result = null;
479 }
480
481 return result;
482 }
483
484 // scan全表数据
485 @Override
486 public ResultScanner getResultScann(String tableName, Scan scan) throws Exception {
487
488 ResultScanner result;
489 TableName name = TableName.valueOf(tableName);
490 if(admin.tableExists(name)) {
491 Table table = conn.getTable(name);
492 result = table.getScanner(scan);
493
494 }else {
495 result = null;
496 }
497
498 return result;
499 }
500
501 // 删除数据(指定的列)
502 @Override
503 public void deleteColumn(String tableName, String rowKey) throws Exception {
504
505 TableName name = TableName.valueOf(tableName);
506 if(admin.tableExists(name)) {
507 Table table = conn.getTable(name);
508 Delete delete = new Delete(rowKey.getBytes());
509 table.delete(delete);
510
511 }else {
512 System.out.println("table不存在");
513 }
514
515
516 }
517
518 // 删除数据(指定的列)
519 @Override
520 public void deleteColumn(String tableName, String rowKey, String falilyName) throws Exception {
521
522 TableName name = TableName.valueOf(tableName);
523 if(admin.tableExists(name)) {
524 Table table = conn.getTable(name);
525 Delete delete = new Delete(rowKey.getBytes());
526 delete.addFamily(falilyName.getBytes());
527 table.delete(delete);
528
529 }else {
530 System.out.println("table不存在");
531 }
532
533 }
534
535 // 删除数据(指定的列)
536 @Override
537 public void deleteColumn(String tableName, String rowKey, String falilyName, String columnName) throws Exception {
538 TableName name = TableName.valueOf(tableName);
539 if(admin.tableExists(name)) {
540 Table table = conn.getTable(name);
541 Delete delete = new Delete(rowKey.getBytes());
542 delete.addColumn(falilyName.getBytes(), columnName.getBytes());
543 table.delete(delete);
544
545 }else {
546 System.out.println("table不存在");
547 }
548 }
549
550 }